Pivotal Tracker API でラベルの一覧とラベルが紐づくストーリーの数を取得する
Pivotal Tracker API でラベルの一覧を取得します。 ついでに、ラベルに紐づくストーリーの数も取得します。
2024.03.19
Pivotal Tracker API でラベルの一覧を取得してみました。 ついでに、ラベルに紐づくストーリーの数も取得しています。
おすすめの方
- Pivotal Tracker APIを利用したい方
- Pivotal Tracker APIでラベルの一覧を取得したい方
- Pivotal Tracker APIでラベルに紐づくストーリーの数を取得したい方
適当なプロジェクトを用意する
適当なプロジェクトです。ラベルやエピックが設定されています。
ラベルとエピックは、次のようになっています。
ラベルの一覧と紐付いているストーリーの数を取得するスクリプト
最初にラベルの一覧を取得し、次にストーリーをラベルで検索します。 検索した結果には次の情報があるので、全件取得していません。
- total_hits
- 検索条件に一致したストーリーの数(未完了のみ)
- total_hits_with_done
- 検索条件に一致したストーリーの数(完了済みを含む)
import requests import json import urllib.parse API_ENDPOINT = "https://www.pivotaltracker.com/services/v5" TOKEN = "xxx" PROJECT_ID = "yyy" def main(): # ラベルの一覧を取得する labels = get_labels() for label in labels: # ラベルごとにストーリーを検索する stories = search_stories_with_labes(label["name"]) dump_labels(label, stories) def dump_labels(label, stories): print( f"{label['name']}, {stories['stories']['total_hits']}, {stories['stories']['total_hits_with_done']}" ) def get_headers(): return { "X-TrackerToken": TOKEN, "Content-Type": "application/json", } def get_labels(): resp = requests.get( f"{API_ENDPOINT}/projects/{PROJECT_ID}/labels", headers=get_headers() ) return resp.json() def search_stories_with_labes(label): query = [ # "type:feature,bug,chore", # "state:unscheduled,unstarted,started", f'label:"{label}"', ] url_query = { # キーワードの区切りは半角空白 "query": " ".join(query), } # 数が知りたいだけなので、loopして全件取得しない # (Response Bodyに数がある) parameter = urllib.parse.urlencode(url_query) resp = requests.get( f"{API_ENDPOINT}/projects/{PROJECT_ID}/search?{parameter}", headers=get_headers(), ) return resp.json() if __name__ == "__main__": main()
スクリプトを実行する
スクリプトを実行すると、ラベルの一覧とストーリーの数を取得できました。
$ python app.py 開発, 0, 0 保守, 2, 3 デザイ, 0, 0 デザイン, 0, 0 これはエピックです, 2, 3 機能a, 2, 2 ready, 4, 5 spike, 0, 0
CSVファイルとして保存し、フィルタとか編集とかできるようにしています。
$ python app.py > labels.csv